#include "camera.h"

//Construtores
Camera::Camera()
{
    tipo = 0;
    changeType(tipo);
}

Camera::Camera(int tipo)
{
    this->tipo = tipo;
    changeType(tipo);
}

//Destrutor
Camera::~Camera()
{
    
}

//Mudar o tipo da camera
void Camera::changeType(int tipo)
{
    this->tipo = tipo;
    switch(tipo)
    {
        //Visao aerea
        case 0:
            SET_rot(0.0f, 0.0f, 0.0f);
            SET_pos(0.0f, 0.0f, -6.0f);
            break;
        //Visao free
        case 1:
            SET_rot(-45.0f, -180.0f, 0.0f);
            SET_pos(0.0f, 0.0f, -6.0f);
            break;
    }
}

//Resetar a camera
void Camera::resetCamera()
{
    changeType(tipo);    
}
//Colocar a cena no loca correto
void Camera::lookCamera()
{
	//Cada camera comporta de um modo diferente
    switch(tipo)
    {
        //Vista aerea
        case 0:
            //Ajustar o zoom
        	glTranslatef(x_pos,y_pos,z_pos);
            //Rotacionar a cena
        	glRotatef(-180.0,0.0f,1.0f,0.0f);
        	glRotatef(z_rot,0.0f,0.0f,1.0f);
        	break;
        //Free view
        case 1:
            //Ajustar o pos
        	glTranslatef(x_pos,y_pos,z_pos);
            //Rotacionar a cena
        	glRotatef(x_rot,1.0f,0.0f,0.0f);
        	glRotatef(y_rot,0.0f,1.0f,0.0f);
        	glRotatef(z_rot,0.0f,0.0f,1.0f);
        	break;
            
    }

}

//Setar os parametros da camera
void Camera::SET_pos(GLfloat x_pos, GLfloat y_pos, GLfloat z_pos)
{
    this->x_pos = x_pos; this->y_pos = y_pos; this->z_pos = z_pos;
}
void Camera::SET_rot(GLfloat x_rot, GLfloat y_rot, GLfloat z_rot)
{
    this->x_rot = x_rot; this->y_rot = y_rot; this->z_rot = z_rot;
}
//Variar os parametros da camera
void Camera::ADD_pos(GLfloat x_add_pos, GLfloat y_add_pos, GLfloat z_add_pos)
{
    x_pos += x_add_pos; y_pos += y_add_pos; z_pos += z_add_pos;
}
void Camera::ADD_rot(GLfloat x_add_rot, GLfloat y_add_rot, GLfloat z_add_rot)
{
    x_rot += x_add_rot; y_rot += y_add_rot; z_rot += z_add_rot;    
}

//Pegar o angulo Z da camera
GLfloat Camera::GET_z_angle()
{
    return z_rot;   
}
